# -*- coding: utf-8 -*-
import os
import sys
from FeiShu.FeishuMsg import feishu_msg
from core.Login import web_login, app_login, C_login
from conftest import clear_extract_yaml
from utils.logger import log
from core.runner import run, generate_report_and_notify


BASE_DIR = os.path.dirname(os.path.abspath(__file__))
# 确保以项目根目录（含 pytest.ini）为当前工作目录，这样 pytest.ini 的 testpaths 才会生效
os.chdir(BASE_DIR)


def main(scope, test_path=None, k_expr=None):
    return run(scope, test_path, k_expr)


"""用例执行文件，所有需要执行的用例都可在此文件执行"""
if __name__ == '__main__':
    # 支持通过环境变量指定运行范围：web/app/c/all，默认为 web
    scope = os.environ.get('HOK_RUN_SCOPE', 'web').lower()
    web_login_result = False
    app_login_result = False
    c_login_result =  False

    # 根据 scope 决定是否需要执行各端登录前置
    if scope in ('web', 'all'):
        web_login_result = web_login()
    if scope in ('app', 'all'):
        # 如需启用 app 登录，取消注释
        app_login_result = app_login()
        pass
    if scope in ('c', 'all'):
        # 如需启用 c 端登录，取消注释
        c_login_result = C_login()
        pass

    exit_code = 1
    if scope == 'all':
        if web_login_result or app_login_result or c_login_result:
            exit_code = main('all', os.environ.get('HOK_TEST_PATH'), os.environ.get('HOK_K_EXPR'))
        else:
            log.error("全端用例前置条件均失败或未启用，无法执行用例")
    elif scope == 'web':
        if web_login_result:
            exit_code = main('web', os.environ.get('HOK_TEST_PATH'), os.environ.get('HOK_K_EXPR'))
        else:
            log.error("web端用例全局前置条件执行失败，无法执行用例")
    elif scope == 'app':
        if app_login_result:
            exit_code = main('app', os.environ.get('HOK_TEST_PATH'), os.environ.get('HOK_K_EXPR'))
        else:
            log.error("app端用例全局前置条件执行失败，无法执行用例")
    elif scope == 'c':
        if c_login_result:
            exit_code = main('c', os.environ.get('HOK_TEST_PATH'), os.environ.get('HOK_K_EXPR'))
        else:
            log.error("c端用例全局前置条件执行失败，无法执行用例")

generate_report_and_notify(exit_code)
# 飞书消息发送，本地运行时需注释掉。
# feishu_msg.send_msg()
feishu_msg.get_msg()
print('飞书消息：', feishu_msg.text)
sys.exit(exit_code)
